Operador condicional
Ao analisar expressões booleanas de modo parecido à instrução if, exceto por: em vez de executar um bloco de código se o resultado do teste for true, ele atribui um valor a uma variável. O operador condicional é um operador ternário.
Essa estrutura é exemplificada abaixo:
package br.devmedia;
public class Condicional {
public static void main(String args[]){
System.out.println(9==9?true:false);
System.out.println(9==9?"Java":"Devmedia");
System.out.println(4==9?"Java":"Devmedia");
System.out.println(4==9?"Java":(1==1?true:false));
}
}
Console:
true
Java
Devmedia
true
Operadores lógicos
Há apenas 6 operadores lógicos que você precisa saber para o exame (&, |, ^, &&, || e !). Três destes (&, | e ^) podem ser utilizados como operadores bitwise (bit a bit).
Esses operadores comparam dois literais bit a bit e retornam uma variável cujos bits foram definidos baseados em:
- | -> ou um ou outro ligado
- ^ -> exatamente um ligado
- & -> dois bits ligados
Instruções if e switch
As instruções if e loops for, são comuns em quase todas das linguagens de programação.
As instruções switch e if são os tipos de controle de decisão que permitirão ao seu programa agir de modo diferente em uma bifurcação de caminho, dependendo, obviamente, do resultado de um teste lógico.
Expressões válidas para instruções if
As instruções if podem avaliar somente valores booleanos. Note como os parênteses são capazes de subverter a ordem de precedência. O último if é o que, realmente, ilustra a precedência.
package br.devmedia;
public class Confuse {
public static void main(String args []){
int y =6, x=3;
if(((x>4)&&(y<3))|true){
System.out.println("Primeiro "+true);
}
if(((x>4)&&(y<3))|false){
System.out.println("Segundo "+true);
}
if((x>4)&&((y<3)|true)){
System.out.println("Terceiro "+true);
}
if((x>4)&&(y<3)|true){
System.out.println("Quarto "+true);
}
}
}
Console:
Primeiro true
O código acima se tornaria ainda mais complexo se você não inserir um conjunto de parênteses, que é o que acontece no quarto if. O terceiro e o quarto ifs produzem o mesmo efeito. A presença dos parênteses é essencial no sentido de se promover clareza e compreensão.
Um erro bastante comum cometido pelos programadores, e que pode ser difícil de identificar, é a atribuição de uma variável booleana quando a intenção seria testá-la.
Atenção com o código a seguir:
boolean bool=false;
if(bool=true){ }
Você pode pensar em uma dessas três hipóteses:
- O código não será compilado porque é utilizada uma atribuição ao invés de um teste de igualdade.
- O código será compilado e executado normalmente, mas o teste if falhará porque bool é falso.
- O código será compilado e executado corretamnete e o teste if será bem sucedido porque bool foi configurado como true em vez de verificar se ele é avaliado como verdadeiro, no argumento da instrução if.
A hipótese c está exata. Não é muito útil, mas correta. Dado que o resultado de qualquer atribuição é igual ao valor da variável incluído após essa atribuição, a expressão bool=true terá como resultado true.
Instruções switch
Switch é uma instrução condicional de diversos desvios, isso quer dizer que, de acordo com o resultado de uma condição pode-se executar um desvio entre os vários possíveis.
A instrução switch avalia o valor (literal) resultante de uma expressão ou variável, que chamamos de condição no parágrafo acima e, de acordo com esse valor, que pode ser dos tipos: char, byte, int, short ou um tipo enumerado, desvia a execução dos programas para um dos casos através da palavra chave case.
Veja o exemplo a seguir:
package br.devmedia;
public class CaseSwitch {
public static void main(String args[]){
int dia=2;
switch (dia) {
case 1:
System.out.println("Domingo");
break;
case 2:
System.out.println("Segunda-feira");
break;
case 3:
System.out.println("Terça-feira");
break;
case 4:
System.out.println("Quarta-feira");
break;
case 5:
System.out.println("Quinta-feira");
break;
case 6:
System.out.println("Sexta-feira");
break;
case 7:
System.out.println("Sábado");
default:
System.out.println("O dia da semana está incorreto.");
break;
}
}
}
Na continução deste artigo trataremos um pouco mais de switch, iteradores e loops.
Leia todos artigos da série
- Desmistificando a Certificação SCJP6 - Parte I
- Desmistificando a Certificação SCJP6 - Parte II
- Desmistificando a Certificação SCJP6 - Parte III
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 1
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 2
- Desmistificando a Certificação SCJP6 - Parte V - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 3/3
- Operadores apropriados - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 1
- Iteradores e loops - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - A
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - B
- Tratamento de Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 1
- Definindo Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 2
- Assertivas Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte IX - Parte 4
- String: Desmistificando a Certificação SCJP6 - Parte X - Parte 1
- StringBuilder/StringBuffer e File: Desmistificando a Certificação SCJP6 - Parte X - Parte 2
- Combinação de Classes E/S: Desmistificando a Certificação SCJP6 - Parte X - Parte 3
- Utilizando Arquivos e Diretórios: Desmistificando a Certificação SCJP6 - Parte X - Parte 4
- Console e Serialização: Desmistificando a Certificação SCJP6 - Parte X - Parte 5
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 A
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 B
- Expressões Regulares: Desmistificando a Certificação SCJP6 Parte XI - Parte 1
- Lista Negada e Metacaracteres: Desmistificando a Certificação SCJP6 Parte XI - Parte 2
- Metacaracteres Âncora e Busca: Desmistificando a Certificação SCJP6 Parte XI - Parte 3